package br.com.foxinline.modelo.titulodocumento;

import br.com.foxinline.modelo.Anexo;
import br.com.foxinline.modelo.ep.Parte;
import br.com.foxinline.modelo.ep.SeloEP;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;

/**
 *
 * @author cadomeireles
 */
@Entity
public class TituloDocumento implements Serializable {

    @Id
    @SequenceGenerator(sequenceName="seq_titulo_documento", name="seq_titulo_documento", allocationSize=1)
    @GeneratedValue(generator="seq_titulo_documento", strategy=GenerationType.SEQUENCE)
    private Long id;

    private boolean ativo = true;

    @Temporal(TemporalType.DATE)
    private Date dataCadastro = new Date();

    @Column(length=20)
    private String numero;    
    
    @ManyToOne
    private AtoTipoTituloDocumento atoTipo;

    @Temporal(TemporalType.DATE)
    private Date data;

    @Column(length=20)
    private String livro;

    @Column(length=20)
    private String livroComplemento;

    @Column(length=20)
    private String folha;

    @Column(length=20)
    private String folhaComplemento;

    @Column(columnDefinition="text")
    private String objeto;

    @Column(columnDefinition="text")
    private String observacao;
    
    @OneToMany(cascade=CascadeType.ALL)
    private List<Parte> partes;
    
    @OneToMany(cascade=CascadeType.ALL)
    private List<SeloEP> selosEP;
    
    @OneToMany(cascade= CascadeType.ALL)
    private List<Anexo> anexos;

    public TituloDocumento() {}
    
    public TituloDocumento(Long id, String numero, AtoTipoTituloDocumento atoTipo, Date data, String livro, String livroComplemento, String folha, String folhaComplemento, String objeto, String observacao, List<Parte> partes, List<SeloEP> selosEP, List<Anexo> anexos) {
        this.id = id;
        this.numero = numero;
        this.atoTipo = atoTipo;
        this.data = data;
        this.livro = livro;
        this.livroComplemento = livroComplemento;
        this.folha = folha;
        this.folhaComplemento = folhaComplemento;
        this.objeto = objeto;
        this.observacao = observacao;
        this.partes = partes;
        this.selosEP = selosEP;
        this.anexos = anexos;
    }

    public List<Anexo> getAnexos() {
        return anexos;
    }

    public void setAnexos(List<Anexo> anexos) {
        this.anexos = anexos;
    }

    public boolean isAtivo() {
        return ativo;
    }

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    public AtoTipoTituloDocumento getAtoTipo() {
        return atoTipo;
    }

    public void setAtoTipo(AtoTipoTituloDocumento atoTipo) {
        this.atoTipo = atoTipo;
    }

    public Date getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(Date dataCadastro) {
        this.dataCadastro = dataCadastro;
    }

    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public String getFolha() {
        return folha;
    }

    public void setFolha(String folha) {
        this.folha = folha;
    }

    public String getFolhaComplemento() {
        return folhaComplemento;
    }

    public void setFolhaComplemento(String folhaComplemento) {
        this.folhaComplemento = folhaComplemento;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getLivro() {
        return livro;
    }

    public void setLivro(String livro) {
        this.livro = livro;
    }

    public String getLivroComplemento() {
        return livroComplemento;
    }

    public void setLivroComplemento(String livroComplemento) {
        this.livroComplemento = livroComplemento;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public String getObjeto() {
        return objeto;
    }

    public void setObjeto(String objeto) {
        this.objeto = objeto;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }

    public List<Parte> getPartes() {
        return partes;
    }

    public void setPartes(List<Parte> partes) {
        this.partes = partes;
    }

    public List<SeloEP> getSelosEP() {
        return selosEP;
    }

    public void setSelosEP(List<SeloEP> selosEP) {
        this.selosEP = selosEP;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final TituloDocumento other = (TituloDocumento) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if (this.ativo != other.ativo) {
            return false;
        }
        if (this.dataCadastro != other.dataCadastro && (this.dataCadastro == null || !this.dataCadastro.equals(other.dataCadastro))) {
            return false;
        }
        if ((this.numero == null) ? (other.numero != null) : !this.numero.equals(other.numero)) {
            return false;
        }
        if (this.atoTipo != other.atoTipo && (this.atoTipo == null || !this.atoTipo.equals(other.atoTipo))) {
            return false;
        }
        if (this.data != other.data && (this.data == null || !this.data.equals(other.data))) {
            return false;
        }
        if ((this.livro == null) ? (other.livro != null) : !this.livro.equals(other.livro)) {
            return false;
        }
        if ((this.livroComplemento == null) ? (other.livroComplemento != null) : !this.livroComplemento.equals(other.livroComplemento)) {
            return false;
        }
        if ((this.folha == null) ? (other.folha != null) : !this.folha.equals(other.folha)) {
            return false;
        }
        if ((this.folhaComplemento == null) ? (other.folhaComplemento != null) : !this.folhaComplemento.equals(other.folhaComplemento)) {
            return false;
        }
        if ((this.objeto == null) ? (other.objeto != null) : !this.objeto.equals(other.objeto)) {
            return false;
        }
        if ((this.observacao == null) ? (other.observacao != null) : !this.observacao.equals(other.observacao)) {
            return false;
        }
        if (this.partes != other.partes && (this.partes == null || !this.partes.equals(other.partes))) {
            return false;
        }
        if (this.selosEP != other.selosEP && (this.selosEP == null || !this.selosEP.equals(other.selosEP))) {
            return false;
        }
        if (this.anexos != other.anexos && (this.anexos == null || !this.anexos.equals(other.anexos))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 41 * hash + (this.id != null ? this.id.hashCode() : 0);
        hash = 41 * hash + (this.ativo ? 1 : 0);
        hash = 41 * hash + (this.dataCadastro != null ? this.dataCadastro.hashCode() : 0);
        hash = 41 * hash + (this.numero != null ? this.numero.hashCode() : 0);
        hash = 41 * hash + (this.atoTipo != null ? this.atoTipo.hashCode() : 0);
        hash = 41 * hash + (this.data != null ? this.data.hashCode() : 0);
        hash = 41 * hash + (this.livro != null ? this.livro.hashCode() : 0);
        hash = 41 * hash + (this.livroComplemento != null ? this.livroComplemento.hashCode() : 0);
        hash = 41 * hash + (this.folha != null ? this.folha.hashCode() : 0);
        hash = 41 * hash + (this.folhaComplemento != null ? this.folhaComplemento.hashCode() : 0);
        hash = 41 * hash + (this.objeto != null ? this.objeto.hashCode() : 0);
        hash = 41 * hash + (this.observacao != null ? this.observacao.hashCode() : 0);
        hash = 41 * hash + (this.partes != null ? this.partes.hashCode() : 0);
        hash = 41 * hash + (this.selosEP != null ? this.selosEP.hashCode() : 0);
        hash = 41 * hash + (this.anexos != null ? this.anexos.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return "TituloDocumento{" + "id=" + id + ", ativo=" + ativo + ", dataCadastro=" + dataCadastro + ", numero=" + numero + ", atoTipo=" + atoTipo + ", data=" + data + ", livro=" + livro + ", livroComplemento=" + livroComplemento + ", folha=" + folha + ", folhaComplemento=" + folhaComplemento + ", objeto=" + objeto + ", observacao=" + observacao + ", partes=" + partes + ", selosEP=" + selosEP + ", anexos=" + anexos + '}';
    }

}
